#!/usr/bin/env python3
"""
系统初始化脚本
用于初始化数据库、创建管理员账号等
"""

import sys
import os
from datetime import datetime

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from backend.app.database.database import SessionLocal, User, create_tables
from backend.app.services.auth_service import auth_service

def init_database():
    """初始化数据库表"""
    print("🗄️ 初始化数据库表...")
    try:
        create_tables()
        print("✅ 数据库表创建成功")
        return True
    except Exception as e:
        print(f"❌ 数据库表创建失败: {e}")
        return False

def create_admin_user():
    """创建管理员用户"""
    print("👤 检查管理员账号...")
    
    db = SessionLocal()
    try:
        # 检查是否已存在管理员
        admin_user = db.query(User).filter(User.is_admin == True).first()
        if admin_user:
            print(f"✅ 管理员用户已存在: {admin_user.username}")
            return True
        
        # 创建管理员用户
        admin_username = "admin"
        admin_password = "admin123"
        admin_email = "admin@example.com"
        admin_full_name = "系统管理员"
        
        # 检查用户名是否已存在
        existing_user = db.query(User).filter(User.username == admin_username).first()
        if existing_user:
            # 如果用户存在但不是管理员，升级为管理员
            existing_user.is_admin = True
            db.commit()
            print(f"✅ 用户 {admin_username} 已升级为管理员")
            return True
        
        # 创建新的管理员用户
        hashed_password = auth_service.get_password_hash(admin_password)
        admin_user = User(
            username=admin_username,
            email=admin_email,
            full_name=admin_full_name,
            hashed_password=hashed_password,
            is_active=True,
            is_admin=True,
            created_at=datetime.utcnow()
        )
        
        db.add(admin_user)
        db.commit()
        db.refresh(admin_user)
        
        print("🎉 管理员用户创建成功!")
        print(f"   用户名: {admin_username}")
        print(f"   密码: {admin_password}")
        print(f"   邮箱: {admin_email}")
        print(f"   姓名: {admin_full_name}")
        
        return True
        
    except Exception as e:
        print(f"❌ 创建管理员用户失败: {e}")
        db.rollback()
        return False
    finally:
        db.close()

def check_directories():
    """检查必要的目录"""
    print("📁 检查目录结构...")
    
    directories = [
        "data",
        "frontend/static", 
        "frontend/templates"
    ]
    
    for directory in directories:
        if not os.path.exists(directory):
            os.makedirs(directory, exist_ok=True)
            print(f"✅ 创建目录: {directory}")
        else:
            print(f"✅ 目录已存在: {directory}")
    
    return True

def show_system_info():
    """显示系统信息"""
    print("\n" + "="*60)
    print("🎉 系统初始化完成!")
    print("="*60)
    print("\n📊 系统功能模块:")
    print("   📈 测试一：财务数据分析")
    print("   📊 测试二：沪深大盘实时数据") 
    print("   👥 测试三：用户管理系统")
    print("   🏠 集成仪表板：实时股价监控")
    
    print("\n🌐 访问地址:")
    print("   🏠 集成仪表板: http://localhost:8000/dashboard")
    print("   📊 财务分析页面: http://localhost:8000")
    print("   📈 大盘数据页面: http://localhost:8000/market")
    print("   👥 用户管理页面: http://localhost:8000/auth")
    print("   📚 API文档: http://localhost:8000/docs")
    
    print("\n👤 默认管理员账号:")
    print("   用户名: admin")
    print("   密码: admin123")
    print("   ⚠️ 建议首次登录后修改密码")
    
    print("\n🔧 Redis配置:")
    print("   端口: 6380 (Microsoft Redis)")
    print("   地址: localhost:6380")
    print("   说明: Redis连接失败时自动使用内存缓存")
    
    print("\n🚀 启动命令:")
    print("   python run.py")
    
    print("\n💡 使用提示:")
    print("   1. 确保Redis服务运行在6380端口（可选）")
    print("   2. 首次运行会自动下载股票数据")
    print("   3. 建议使用现代浏览器访问系统")
    print("   4. 管理员可在用户管理页面管理用户")

def main():
    """主函数"""
    print("🚀 股票分析平台系统初始化")
    print("="*50)
    
    # 1. 检查目录结构
    if not check_directories():
        print("❌ 目录检查失败")
        return False
    
    # 2. 初始化数据库
    if not init_database():
        print("❌ 数据库初始化失败")
        return False
    
    # 3. 创建管理员账号
    if not create_admin_user():
        print("❌ 管理员账号创建失败")
        return False
    
    # 4. 显示系统信息
    show_system_info()
    
    return True

if __name__ == "__main__":
    try:
        success = main()
        if success:
            print("\n✅ 系统初始化成功! 现在可以运行 python run.py 启动系统")
        else:
            print("\n❌ 系统初始化失败!")
            sys.exit(1)
    except KeyboardInterrupt:
        print("\n\n⚠️ 用户中断初始化")
        sys.exit(1)
    except Exception as e:
        print(f"\n❌ 初始化过程中发生错误: {e}")
        sys.exit(1)
